package com.ly.thread;

import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;

public class ThreadList {
    public static void main(String[] args) {
        //list线程不安全
//        List<String> list = new ArrayList<>();
//        for(int i=0;i<20;i++) {
//            new Thread(() -> {
//                list.add(UUID.randomUUID().toString());
//                System.out.println(list);
//                },i+"").start();
//
//        }
        //解决方法1
//        List<String> list2 = new Vector<>();  //Vector线程安全，底层add方法有sync
//        for(int i=0;i<20;i++) {
//            new Thread(() -> {
//                list2.add(UUID.randomUUID().toString());
//                System.out.println(list2);
//            },i+"").start();
//        }
        //解决方法2
//        List<String> list3 = Collections.synchronizedList(new ArrayList<>());
//        for(int i=0;i<20;i++) {
//            new Thread(() -> {
//                list3.add(UUID.randomUUID().toString());
//                System.out.println(list3);
//            },i+"").start();
//        }
        //解决方法3
        List<String> list4 = new CopyOnWriteArrayList<>();
        for(int i=0;i<20;i++) {
            new Thread(() -> {
                list4.add(UUID.randomUUID().toString());
                System.out.println(list4);
            },i+"").start();
        }


    }
}
